#ifndef MAIN_H
#define MAIN_H

json::Object check_for_game_message(zmq::socket_t&, json::Object);
/*

check_for_game_message(game_state, state_channel);

*/
double calculate_distance_between_two_coordinates(double, double, double, double);
/*

double enemy_x, enemy_y;
double distance_to_enemy_fast_tank;
enemy_fast_tank_position(game_state) >> enemy_x >> enemy_y;
distance_to_enemy_fast_tank = calculate_distance_between_two_points(our_x, our_y, enemy_x, enemy_y);

*/
double calculate_relative_radial_position(double, double, double, double);
/*

double enemy_radial_position = calculate_enemy_radial_position(our_x, our_y, enemy_x, enemy_y); // Degrees

*/
double calculate_optimal_rotation(double, double);
/*

double our_turret_direction = our_fast_tank_turret_direction(game_state); // Degrees

*/
std::stringstream determine_coordinates_of_best_target(json::Object, double, double);
/*

// Get our fast tank position
double our_x, our_y;
our_slow_tank_position(game_state) >> our_x >> our_y;

// Determine position of best enemy target
double enemy_x, enemy_y;
determine_coordinates_of_best_target(game_state, our_x, our_y) >> enemy_x >> enemy_y;

*/
void calculate_enemy_tank_velocity(json::Object, std::vector<double>&);
/*
vector<double> data;
calculate_enemy_tank_velocity(game_state, data);
*/
bool our_fast_tank_attack_best_target(zmq::socket_t&, json::Object, std::string, std::vector<double>&);
bool our_slow_tank_attack_best_target(zmq::socket_t&, json::Object, std::string, std::vector<double>&);
/*

our_fast_tank_attack_best_target(command_channel, game_state, client_token);

*/
bool our_fast_tank_move_to_coordinates(zmq::socket_t&, json::Object, std::string, double, double, std::string);
bool our_slow_tank_move_to_coordinates(zmq::socket_t&, json::Object, std::string, double, double, std::string);
/*

double desired_x = 100;
double desired_y = 100;
our_fast_tank_move_to_coordinates(command_channel, game_state, client_token, desired_x, desired_y);

*/
void our_fast_tank_follow_path(zmq::socket_t&, json::Object, std::string);
void our_slow_tank_follow_path(zmq::socket_t&, json::Object, std::string);
/*

our_fast_tank_follow_path(command_channel, game_state, client_token, our_fast_tank_path_index);

*/
bool our_fast_tank_dodge(zmq::socket_t&, json::Object, std::string);
bool our_slow_tank_dodge(zmq::socket_t&, json::Object, std::string);

#endif